/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.util.List;
import modelo.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Almacen;

/**
 *
 * @author alejandrolopezdelolmo
 */
public class AlmacenDAO {
    
    private Session sesion;//ESTABLECE UNA SESION CON LA BASE DE DATOS
    private Transaction transaccion;//EJECUTA LAS SENTENCIAS (PARECIDO A STATMENT)
    
    
    //ABRE UNA NUEVA SESION CON LA BASE DE DATOS
     private void iniciarConexionConBBDD()
    {
        sesion=HibernateUtil.getSessionFactory().openSession();//ABRIMOS UNA SESION
        transaccion=sesion.beginTransaction();//ARRANCA LA TRANSACCION
    }
     
     /**
      * AÑADE UN NUEVO ALMACEN A LA BASE DE DATOS
      * @param almacenInsertar almacen que queremos dar de alta
      */
     public void addAlmacen(Almacen almacenInsertar)
     {
         iniciarConexionConBBDD();
         sesion.save(almacenInsertar);
         transaccion.commit();
         sesion.close();
     }
     
     /**
      * ACTUALIZA LA INFORMACION DE UN ALMACEN EN LA BASE DE DATOS
      * @param almacenModificar almacen que queremos modificar
      */
     public void updateAlmacen(Almacen almacenModificar)
     {
        iniciarConexionConBBDD();
         sesion.update(almacenModificar);
         transaccion.commit();
         sesion.close(); 
     }
     
     /**
      * ELIMINA UN ALMACEN DE LA BASE DE DATOS
      * @param almacenEliminar almacen que queremos eliminar
      */
     public void deleteAlmacen(Almacen almacenEliminar)
     {
         iniciarConexionConBBDD();
         sesion.delete(almacenEliminar);
         transaccion.commit();
         sesion.close(); 
     }
     
     /**
      * DEVUELVE UN ALMACEN DE LA BASE DE DATOS
      * @param codAlmacen codigo del almacen que queremos recuperar
      * @return Almacen
      */
     public Almacen getAlmacen(int codAlmacen)
     {
         Almacen almacenEncontrado;
         iniciarConexionConBBDD();
         almacenEncontrado=(Almacen)sesion.get(Almacen.class,codAlmacen);
         sesion.close(); 
         
         return almacenEncontrado;
     }
     
     /**
      * DEVUELVE EL NUMERO MAXIMO DE ALMACENES
      * @return numero maximo almacen
      */
     public Integer numNuevoAlmacen()
     {
        Integer numAlmacen;
        
        iniciarConexionConBBDD();
        numAlmacen=(Integer)sesion.createQuery("SELECT MAX(idAlmacen) FROM Almacen").uniqueResult();
        sesion.close();
        return numAlmacen;
     }
     
     /**
      * DEVUELVE TODOS LOS ALMACENES
      * @return List<Almacen>
      */
    public List<Almacen> getAlmacenes() {
        List<Almacen> listaAlmacenes;
        iniciarConexionConBBDD();
        listaAlmacenes = sesion.createQuery("FROM Almacen").list();
        sesion.close();
        return listaAlmacenes;

    }
     
     /**
      * DEVUELVE TODOS LOS CODIGOS DE ALMACEN
      * @return List<Integer>
      */
      public List<Integer> getCodigosAlmacen() {
        List<Integer> listaDeCodigos;
        iniciarConexionConBBDD();
        listaDeCodigos = sesion.createQuery("SELECT idAlmacen FROM Almacen").list();
        sesion.close();

        return listaDeCodigos;
    }
}
